{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Pyspark for Linear Regression"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. Set up spark context and SparkSession"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "#from pyspark import SparkConf, SparkContext\n",
    "## set up spark context\n",
    "#from pyspark.sql import SQLContext\n",
    "#sc = SparkContext()\n",
    "#sqlContext = SQLContext(sc)\n",
    "## set up  SparkSession\n",
    "from pyspark.sql import SparkSession\n",
    "\n",
    "spark = SparkSession \\\n",
    "    .builder \\\n",
    "    .appName(\"Python Spark SQL basic example\") \\\n",
    "    .config(\"spark.some.config.option\", \"some-value\") \\\n",
    "    .getOrCreate()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Load dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "df = spark.read.format('com.databricks.spark.csv').\\\n",
    "                               options(header='true', \\\n",
    "                               inferschema='true').load(\"./data/Advertising.csv\",header=True);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "root\n",
      " |-- _c0: integer (nullable = true)\n",
      " |-- TV: double (nullable = true)\n",
      " |-- Radio: double (nullable = true)\n",
      " |-- Newspaper: double (nullable = true)\n",
      " |-- Sales: double (nullable = true)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "df.take(2)\n",
    "df.printSchema()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. Convert the data to dense vector"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- check the dataset and the Schema"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from pyspark.sql import Row\n",
    "from pyspark.ml.linalg import Vectors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# convert the data to dense vector\n",
    "#def transData(row):\n",
    "#    return Row(label=row[\"Sales\"],\n",
    "#               features=Vectors.dense([row[\"TV\"],\n",
    "#                                       row[\"Radio\"],\n",
    "#                                       row[\"Newspaper\"]]))\n",
    "def transData(data):\n",
    "    return data.rdd.map(lambda r: [Vectors.dense(r[:-1]),r[-1]]).toDF(['features','label'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. Transform the dataset to DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+--------------------+-----+\n",
      "|            features|label|\n",
      "+--------------------+-----+\n",
      "|[1.0,230.1,37.8,6...| 22.1|\n",
      "|[2.0,44.5,39.3,45.1]| 10.4|\n",
      "|[3.0,17.2,45.9,69.3]|  9.3|\n",
      "|[4.0,151.5,41.3,5...| 18.5|\n",
      "|[5.0,180.8,10.8,5...| 12.9|\n",
      "| [6.0,8.7,48.9,75.0]|  7.2|\n",
      "+--------------------+-----+\n",
      "only showing top 6 rows\n",
      "\n"
     ]
    }
   ],
   "source": [
    "#transformed = df.rdd.map(transData).toDF() \n",
    "transformed= transData(df)\n",
    "transformed.show(6)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "### 5. Fit model (Ridge Regression and the LASSO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Import LinearRegression class\n",
    "from pyspark.ml.regression import LinearRegression\n",
    "\n",
    "# Define LinearRegression algorithm\n",
    "lr = LinearRegression()\n",
    "\n",
    "# Fit 2 models, using different regularization parameters\n",
    "modelA = lr.fit(transformed, {lr.regParam:0.0})\n",
    "modelB = lr.fit(transformed, {lr.regParam:1.0})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DenseVector([-0.0006, 0.0458, 0.1884, -0.0012])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "modelA.coefficients"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.0052094200978514"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " modelA.intercept"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+--------------------+-----+------------------+\n",
      "|            features|label|        prediction|\n",
      "+--------------------+-----+------------------+\n",
      "|[1.0,230.1,37.8,6...| 22.1|20.572514570685502|\n",
      "|[2.0,44.5,39.3,45.1]| 10.4|12.388462990928932|\n",
      "|[3.0,17.2,45.9,69.3]|  9.3| 12.35144102556534|\n",
      "|[4.0,151.5,41.3,5...| 18.5|17.645432513138324|\n",
      "|[5.0,180.8,10.8,5...| 12.9|13.240524594858073|\n",
      "| [6.0,8.7,48.9,75.0]|  7.2|12.518668794162874|\n",
      "|[7.0,57.5,32.8,23.5]| 11.8|11.783016008679457|\n",
      "|[8.0,120.2,19.6,1...| 13.2|12.180723998491587|\n",
      "|   [9.0,8.6,2.1,1.0]|  4.8| 3.788025221710791|\n",
      "|[10.0,199.8,2.6,2...| 10.6|12.608877619721778|\n",
      "|[11.0,66.1,5.8,24.2]|  8.6|  7.08715352626673|\n",
      "|[12.0,214.7,24.0,...| 17.4|17.342564342618747|\n",
      "|[13.0,23.8,35.1,6...|  9.2|10.617452825343557|\n",
      "| [14.0,97.5,7.6,7.2]|  9.7| 8.883004180325315|\n",
      "|[15.0,204.1,32.9,...| 19.0|18.479990677337003|\n",
      "|[16.0,195.4,47.7,...| 22.4|20.860652402722692|\n",
      "|[17.0,67.8,36.6,1...| 12.5|12.852044750236278|\n",
      "|[18.0,281.4,39.6,...| 24.4| 23.26671246109804|\n",
      "|[19.0,69.2,20.5,1...| 11.3|10.000988565978233|\n",
      "|[20.0,147.3,23.9,...| 14.6|14.215016196093103|\n",
      "+--------------------+-----+------------------+\n",
      "only showing top 20 rows\n",
      "\n"
     ]
    }
   ],
   "source": [
    " # Make predictions\n",
    "predictionsA = modelA.transform(transformed)\n",
    "predictionsA.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6. Evaluation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ModelA: Root Mean Squared Error = 1.6682438365932681\n"
     ]
    }
   ],
   "source": [
    "from pyspark.ml.evaluation import RegressionEvaluator\n",
    "evaluator = RegressionEvaluator(metricName=\"rmse\")\n",
    "RMSE = evaluator.evaluate(predictionsA)\n",
    "print(\"ModelA: Root Mean Squared Error = \" + str(RMSE))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+--------------------+-----+------------------+\n",
      "|            features|label|        prediction|\n",
      "+--------------------+-----+------------------+\n",
      "|[1.0,230.1,37.8,6...| 22.1|19.828612153446723|\n",
      "|[2.0,44.5,39.3,45.1]| 10.4|12.743896164254814|\n",
      "|[3.0,17.2,45.9,69.3]|  9.3|12.886085216518897|\n",
      "|[4.0,151.5,41.3,5...| 18.5|17.271268280921475|\n",
      "|[5.0,180.8,10.8,5...| 12.9|13.628873620827338|\n",
      "| [6.0,8.7,48.9,75.0]|  7.2| 13.06393451559012|\n",
      "|[7.0,57.5,32.8,23.5]| 11.8|12.079322352937485|\n",
      "|[8.0,120.2,19.6,1...| 13.2|12.351214463828724|\n",
      "|   [9.0,8.6,2.1,1.0]|  4.8| 5.238785191652109|\n",
      "|[10.0,199.8,2.6,2...| 10.6| 12.82456949643117|\n",
      "|[11.0,66.1,5.8,24.2]|  8.6| 8.189558569720916|\n",
      "|[12.0,214.7,24.0,...| 17.4| 16.62906608991127|\n",
      "|[13.0,23.8,35.1,6...|  9.2|11.421348919147173|\n",
      "| [14.0,97.5,7.6,7.2]|  9.7| 9.565107125587986|\n",
      "|[15.0,204.1,32.9,...| 19.0| 17.89351495228149|\n",
      "|[16.0,195.4,47.7,...| 22.4|  19.9188684480379|\n",
      "|[17.0,67.8,36.6,1...| 12.5|13.673942272805704|\n",
      "|[18.0,281.4,39.6,...| 24.4|21.985941097144856|\n",
      "|[19.0,69.2,20.5,1...| 11.3|10.563069976299298|\n",
      "|[20.0,147.3,23.9,...| 14.6|14.110888564515243|\n",
      "+--------------------+-----+------------------+\n",
      "only showing top 20 rows\n",
      "\n"
     ]
    }
   ],
   "source": [
    "predictionsB = modelB.transform(transformed)\n",
    "predictionsB.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ModelB: Root Mean Squared Error = 1.8387638749471698\n"
     ]
    }
   ],
   "source": [
    "RMSE = evaluator.evaluate(predictionsB)\n",
    "print(\"ModelB: Root Mean Squared Error = \" + str(RMSE))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 7. Visualization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>pop</th>\n",
       "      <th>pred</th>\n",
       "      <th>sales</th>\n",
       "      <th>type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>20.572515</td>\n",
       "      <td>22.1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.0</td>\n",
       "      <td>12.388463</td>\n",
       "      <td>10.4</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3.0</td>\n",
       "      <td>12.351441</td>\n",
       "      <td>9.3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.0</td>\n",
       "      <td>17.645433</td>\n",
       "      <td>18.5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.0</td>\n",
       "      <td>13.240525</td>\n",
       "      <td>12.9</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6.0</td>\n",
       "      <td>12.518669</td>\n",
       "      <td>7.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7.0</td>\n",
       "      <td>11.783016</td>\n",
       "      <td>11.8</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8.0</td>\n",
       "      <td>12.180724</td>\n",
       "      <td>13.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9.0</td>\n",
       "      <td>3.788025</td>\n",
       "      <td>4.8</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10.0</td>\n",
       "      <td>12.608878</td>\n",
       "      <td>10.6</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>11.0</td>\n",
       "      <td>7.087154</td>\n",
       "      <td>8.6</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>12.0</td>\n",
       "      <td>17.342564</td>\n",
       "      <td>17.4</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>13.0</td>\n",
       "      <td>10.617453</td>\n",
       "      <td>9.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>14.0</td>\n",
       "      <td>8.883004</td>\n",
       "      <td>9.7</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>15.0</td>\n",
       "      <td>18.479991</td>\n",
       "      <td>19.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>16.0</td>\n",
       "      <td>20.860652</td>\n",
       "      <td>22.4</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>17.0</td>\n",
       "      <td>12.852045</td>\n",
       "      <td>12.5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>18.0</td>\n",
       "      <td>23.266712</td>\n",
       "      <td>24.4</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>19.0</td>\n",
       "      <td>10.000989</td>\n",
       "      <td>11.3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>20.0</td>\n",
       "      <td>14.215016</td>\n",
       "      <td>14.6</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>21.0</td>\n",
       "      <td>18.142314</td>\n",
       "      <td>18.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>22.0</td>\n",
       "      <td>14.791193</td>\n",
       "      <td>12.5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>23.0</td>\n",
       "      <td>6.529739</td>\n",
       "      <td>5.6</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>24.0</td>\n",
       "      <td>16.593037</td>\n",
       "      <td>15.5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>25.0</td>\n",
       "      <td>8.193429</td>\n",
       "      <td>9.7</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>26.0</td>\n",
       "      <td>15.659719</td>\n",
       "      <td>12.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>27.0</td>\n",
       "      <td>15.034894</td>\n",
       "      <td>15.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>28.0</td>\n",
       "      <td>17.097299</td>\n",
       "      <td>15.9</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>29.0</td>\n",
       "      <td>19.454155</td>\n",
       "      <td>18.9</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>30.0</td>\n",
       "      <td>9.182998</td>\n",
       "      <td>10.5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>170</th>\n",
       "      <td>171.0</td>\n",
       "      <td>8.325230</td>\n",
       "      <td>8.4</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>171</th>\n",
       "      <td>172.0</td>\n",
       "      <td>14.389490</td>\n",
       "      <td>14.5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>172</th>\n",
       "      <td>173.0</td>\n",
       "      <td>8.471814</td>\n",
       "      <td>7.6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>173</th>\n",
       "      <td>174.0</td>\n",
       "      <td>12.146656</td>\n",
       "      <td>11.7</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>174</th>\n",
       "      <td>175.0</td>\n",
       "      <td>13.651313</td>\n",
       "      <td>11.5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>175</th>\n",
       "      <td>176.0</td>\n",
       "      <td>23.062455</td>\n",
       "      <td>27.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>176</th>\n",
       "      <td>177.0</td>\n",
       "      <td>18.892933</td>\n",
       "      <td>20.2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>177</th>\n",
       "      <td>178.0</td>\n",
       "      <td>12.473761</td>\n",
       "      <td>11.7</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>178</th>\n",
       "      <td>179.0</td>\n",
       "      <td>15.641564</td>\n",
       "      <td>11.8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>179</th>\n",
       "      <td>180.0</td>\n",
       "      <td>12.520477</td>\n",
       "      <td>12.6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>180</th>\n",
       "      <td>181.0</td>\n",
       "      <td>10.952582</td>\n",
       "      <td>10.5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>181</th>\n",
       "      <td>182.0</td>\n",
       "      <td>13.905289</td>\n",
       "      <td>12.2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>182</th>\n",
       "      <td>183.0</td>\n",
       "      <td>7.709217</td>\n",
       "      <td>8.7</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>183</th>\n",
       "      <td>184.0</td>\n",
       "      <td>22.748800</td>\n",
       "      <td>26.2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>184</th>\n",
       "      <td>185.0</td>\n",
       "      <td>17.768828</td>\n",
       "      <td>17.6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>185</th>\n",
       "      <td>186.0</td>\n",
       "      <td>19.539183</td>\n",
       "      <td>22.6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>186</th>\n",
       "      <td>187.0</td>\n",
       "      <td>10.334223</td>\n",
       "      <td>10.3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>187</th>\n",
       "      <td>188.0</td>\n",
       "      <td>16.427155</td>\n",
       "      <td>17.3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>188</th>\n",
       "      <td>189.0</td>\n",
       "      <td>17.672787</td>\n",
       "      <td>15.9</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>189</th>\n",
       "      <td>190.0</td>\n",
       "      <td>7.217047</td>\n",
       "      <td>6.7</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>190</th>\n",
       "      <td>191.0</td>\n",
       "      <td>12.435807</td>\n",
       "      <td>10.8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>191</th>\n",
       "      <td>192.0</td>\n",
       "      <td>9.085050</td>\n",
       "      <td>9.9</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>192</th>\n",
       "      <td>193.0</td>\n",
       "      <td>5.961053</td>\n",
       "      <td>5.9</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>193</th>\n",
       "      <td>194.0</td>\n",
       "      <td>17.467967</td>\n",
       "      <td>19.6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>194</th>\n",
       "      <td>195.0</td>\n",
       "      <td>15.823049</td>\n",
       "      <td>17.3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>195</th>\n",
       "      <td>196.0</td>\n",
       "      <td>6.586096</td>\n",
       "      <td>7.6</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>196</th>\n",
       "      <td>197.0</td>\n",
       "      <td>8.893868</td>\n",
       "      <td>9.7</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>197</th>\n",
       "      <td>198.0</td>\n",
       "      <td>12.762469</td>\n",
       "      <td>12.8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>198</th>\n",
       "      <td>199.0</td>\n",
       "      <td>22.389933</td>\n",
       "      <td>25.5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199</th>\n",
       "      <td>200.0</td>\n",
       "      <td>14.791577</td>\n",
       "      <td>13.4</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>400 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       pop       pred  sales type\n",
       "0      1.0  20.572515   22.1    0\n",
       "1      2.0  12.388463   10.4    0\n",
       "2      3.0  12.351441    9.3    0\n",
       "3      4.0  17.645433   18.5    0\n",
       "4      5.0  13.240525   12.9    0\n",
       "5      6.0  12.518669    7.2    0\n",
       "6      7.0  11.783016   11.8    0\n",
       "7      8.0  12.180724   13.2    0\n",
       "8      9.0   3.788025    4.8    0\n",
       "9     10.0  12.608878   10.6    0\n",
       "10    11.0   7.087154    8.6    0\n",
       "11    12.0  17.342564   17.4    0\n",
       "12    13.0  10.617453    9.2    0\n",
       "13    14.0   8.883004    9.7    0\n",
       "14    15.0  18.479991   19.0    0\n",
       "15    16.0  20.860652   22.4    0\n",
       "16    17.0  12.852045   12.5    0\n",
       "17    18.0  23.266712   24.4    0\n",
       "18    19.0  10.000989   11.3    0\n",
       "19    20.0  14.215016   14.6    0\n",
       "20    21.0  18.142314   18.0    0\n",
       "21    22.0  14.791193   12.5    0\n",
       "22    23.0   6.529739    5.6    0\n",
       "23    24.0  16.593037   15.5    0\n",
       "24    25.0   8.193429    9.7    0\n",
       "25    26.0  15.659719   12.0    0\n",
       "26    27.0  15.034894   15.0    0\n",
       "27    28.0  17.097299   15.9    0\n",
       "28    29.0  19.454155   18.9    0\n",
       "29    30.0   9.182998   10.5    0\n",
       "..     ...        ...    ...  ...\n",
       "170  171.0   8.325230    8.4    1\n",
       "171  172.0  14.389490   14.5    1\n",
       "172  173.0   8.471814    7.6    1\n",
       "173  174.0  12.146656   11.7    1\n",
       "174  175.0  13.651313   11.5    1\n",
       "175  176.0  23.062455   27.0    1\n",
       "176  177.0  18.892933   20.2    1\n",
       "177  178.0  12.473761   11.7    1\n",
       "178  179.0  15.641564   11.8    1\n",
       "179  180.0  12.520477   12.6    1\n",
       "180  181.0  10.952582   10.5    1\n",
       "181  182.0  13.905289   12.2    1\n",
       "182  183.0   7.709217    8.7    1\n",
       "183  184.0  22.748800   26.2    1\n",
       "184  185.0  17.768828   17.6    1\n",
       "185  186.0  19.539183   22.6    1\n",
       "186  187.0  10.334223   10.3    1\n",
       "187  188.0  16.427155   17.3    1\n",
       "188  189.0  17.672787   15.9    1\n",
       "189  190.0   7.217047    6.7    1\n",
       "190  191.0  12.435807   10.8    1\n",
       "191  192.0   9.085050    9.9    1\n",
       "192  193.0   5.961053    5.9    1\n",
       "193  194.0  17.467967   19.6    1\n",
       "194  195.0  15.823049   17.3    1\n",
       "195  196.0   6.586096    7.6    1\n",
       "196  197.0   8.893868    9.7    1\n",
       "197  198.0  12.762469   12.8    1\n",
       "198  199.0  22.389933   25.5    1\n",
       "199  200.0  14.791577   13.4    1\n",
       "\n",
       "[400 rows x 4 columns]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import numpy, pandas, and ggplot\n",
    "import numpy as np\n",
    "from pandas import *\n",
    "from ggplot import *\n",
    " \n",
    "# Create Python DataFrame\n",
    "pop = transformed.rdd.map(lambda p: (p.features[0])).collect()\n",
    "sales = transformed.rdd.map(lambda p: (p.label)).collect()\n",
    "predA = predictionsA.select(\"prediction\").rdd.map(lambda r: r[0]).collect()\n",
    "predB = predictionsB.select(\"prediction\").rdd.map(lambda r: r[0]).collect()\n",
    "\n",
    "\n",
    "\n",
    "pydf = DataFrame([predA]) \n",
    "nx,ny = pydf.shape\n",
    "type1 = Series([0 for x in range(ny)])\n",
    "type2 = Series([1 for x in range(ny)])\n",
    "\n",
    "#pydf\n",
    "# pandas DataFrame    \n",
    "pydf1 = DataFrame({'pop':pop,'sales':sales,'pred':predA,'type':type1})\n",
    "pydf2 = DataFrame({'pop':pop,'sales':sales,'pred':predB,'type':type2})\n",
    "\n",
    "frames = [pydf1, pydf2]\n",
    "\n",
    "result = concat(frames)\n",
    "result['type'] = result['type'].astype(object)\n",
    "result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nIiIiIiJJUlItIiIiIpIkJdUiIiIiIklSUi0iIiIikiQl1SIiIiIiSVJSLSIiIiKSJCXVIiIiIiJJ\nUlItIiIiIpIkJdUiIiIiIklSUi0iIiIikiQl1SIiIiIiSVJSLSIiIiKSJCXVIiIiIiJJUlItIiIi\nIpIkJdUiIiIiIkmymaZpWh1Etuvv7+f999+nvr4ev99vdThTKlv7nq39BvVdfVffs0W29huyu+/Z\nTCPV08Dg4CCbN29mcHDQ6lCmXLb2PVv7Deq7+q6+Z4ts7Tdkd9+zmZJqEREREZEkKakWEREREUmS\nkmoRERERkSQ5vv71r3/d6iCynWmauN1uampq8Hg8VoczpbK179nab1Df1Xf1PVtka78hu/uezVT9\nQ0REREQkSU6rA8h2wWCQZ599lqamJnJycrjmmmtYvny51WGlXCwW44UXXqC5uZlQKERRURHr169n\nwYIF9PT08KMf/QiXy5V4/uWXX87atWstjDi1Hn30UQ4dOoTdPjzjyu/38/DDDwOwbds2Xn31VYLB\nIPPmzeOWW24hJyfHynBT5lvf+taodiwW45JLLmHDhg0Zt9/fffddGhoaOHbsGMuWLeO2225L/K65\nuZkXXniBvr4+Zs2axa233kphYSEw/G/y/PPPs3PnTlwuF5dddhlr1qyxqhsTMl7fW1tb2bRpE21t\nbdjtdmpqarjxxhvJz88HYNOmTbz55ps4HI7Eez300EMUFxdb0o+JGK/vZzu+032/j9fvbdu28dxz\nzyWeZ5omsViML37xi1RWVmbEPj/T9xlk/vku41NSbbGNGzficDj48pe/THt7O7/+9a+pqKhgxowZ\nVoeWUoZh4Pf7uf/++ykoKKCxsZEnn3yShx56KPGcRx55ZNQHbabZsGED9fX1ox47duwYzz//PPfd\ndx8zZ87kueee44UXXuCuu+6yKMrU+trXvpb4ORwO84Mf/IC6urpRz8mU/Z6fn8+VV15JU1MT0Wg0\n8XggEOC3v/0tN998MwsXLmTTpk08+eSTPPDAAwC8/vrrdHd386UvfYnBwUF+8YtfUFZWlviCTgfj\n9X1oaIj6+no+8YlPYLfb2bhxI3/4wx/49Kc/nXjO0qVLueOOO6wIOyXG6/tx4x3f6b7fx+v38uXL\nRw0Mffjhh7zxxhvMnDkz8Vi67/MzfZ+53e6MP99lfLpR0UKRSISdO3eybt06PB4P1dXVLFq0iK1b\nt1odWsq53W7WrVtHUVERdrudRYsWUVhYyJEjR6wOzVLbtm1j4cKFiXl3V199Nbt27SIcDlsdWsrt\n2rWL3NxcqqurrQ5lUtTV1bFkyRJ8Pt+ox3ft2kVZWRlLly7F5XJx1VVXcfToUTo6OgBoaGjgyiuv\nxOfzUVZWRn19PQ0NDVZ0YcLG6/uCBQtYunQpXq8Xt9vNqlWraG1ttSjKyTFe388m3ff7ufZ769at\nrFixApvNNkWRTb4zfZ9lw/ku49NItYW6urqw2+2UlpYmHisvL6elpcXCqKbG4OAgXV1dlJWVJR77\n4Q9/CEBtbS3XXnstubm5VoU3KV599VVeeeUVSktLufrqq5k7dy4dHR3Mnj078Zzi4mIcDgddXV1U\nVlZaGG3qNTQ0nPbLNdP3e0dHBxUVFYm22+2mqKiIjo4O8vLyGBwcHPX78vJydu/ebUWok66lpWXU\nOQ+wd+9evvvd75Kfn8+qVau45JJLLIpucpzu+A6FQlmx33t7e2lpaeGWW24Z9Xim7fOTv8+2bNmi\n8z2LKam2UCQSOeWuYK/Xm5GjlCeLx+P8/ve/Z+XKlZSVlREOh3nggQeoqKggFArxwgsv8NRTT426\nRJzurr32WsrKynA4HGzfvp3f/OY3PPjgg1lzDJzuyzUnJyfj9zsMn+dj58gf38eRSARg1DGQifsf\noL29nc2bN3PvvfcmHlu6dCn19fXk5eVx6NAhnnjiCbxeLxdccIGFkabGmY7vbNnvW7duZc6cORQV\nFSUey7R9Pvb7TOd7dtP0Dwu53e5TTqZwOJzR5XcMw+Cpp57C4XCwYcMGYPgDpqqqCofDQV5eHhs2\nbKCpqSmjPmhmzZqFx+PB6XSycuVKZs+eTWNjY9YcA6f7cs2G/Q5nPs/dbneiPfZ3maSrq4vHHnuM\nG2+8cdT0nxkzZuD3+7Hb7cyZM4fVq1ezc+dOCyNNnTMd39my37du3crKlStHPZZJ+/x032c637Ob\nkmoLlZSUYBgGXV1dicfa29tPuTyaKUzT5NlnnyUQCHD33XePe3Pa8ekBmVzt0WazYZomZWVlHD16\nNPF4d3c3sViMkpISC6NLvePzKs8kU/f72H0ciUTo7u6mrKwMn89HXl7eqN9n2mdAb28vv/zlL7ny\nyivP6RjItP1/3MnHdzbs94MHDzIwMHDKjcljpes+H+/7LNvP92ynpNpCbrebJUuWsGnTJiKRCAcP\nHmTPnj1n/eJJV88//zwdHR3ce++9o8pMHTp0iM7OTgzDIBgM8uKLL1JTU4PX67Uw2tQJhULs27eP\naDRKPB5n27ZttLS0MH/+fJYvX86ePXtoaWkhEomwadMmlixZklEjF8e/XJcuXTrq8Uzb7/F4nGg0\nimmamKaZ2N9Llizh2LFj7Ny5k2g0yubNmykvL098ka5YsYI33niDUChER0cHH3zwwSmje9PdeH3v\n7+/nP/7jP8adN7t7925CoRCmaXLo0CHeffddFi9ebEEPJm68vp/t+E73/T5ev49raGg47WdZJuxz\nGP/7LBvOdxmfFn+xWDAY5JlnnqG5uRmfz8f69eszsk51b28vP/zhD3E4HIlazQA33XQTNpuNV199\nlUAggMfjYd68eVx77bWJWrbpLhAI8Nhjj9HZ2YnNZkvcqFhbWwsMVwB55ZVXCIVCGVenGuC5554j\nGo1y++23j3r8o48+yqj9vmnTJjZv3jzqsbVr17Ju3TqamprYuHEjfX19VFVVceuttyamwmRC3drx\n+m6z2Xj99ddHJR1wotTi7373O5qamojFYvj9fi655BIuvfTSKYs7Fcbre2lp6RmP73Tf72c63qPR\nKD/4wQ+4++67mTdv3qjnZMI+P9P32fLlyzP+fJfxKakWEREREUmSpn+IiIiIiCRJSbWIiIiISJKU\nVIuIiIiIJElJtYiIiIhIkpRUi4iIiIgkSUm1iIiIiEiSlFSLiIiIiCRJSbWIiIiISJKUVIuIiIiI\nJElJtYiIiIhIkpRUi4iIiIgkSUm1iIiIiEiSlFSLiIiIiCRJSbWIiIiISJKUVIuIiIiIJElJtYiI\niIhIkpRUi4iIiIgkSUm1iIiIiEiSlFSLiIiIiCRJSbWIyDRVU1PDd77zHerq6igqKuKzn/0sQ0ND\nAPzsZz9j/vz5FBcXc/PNN9PW1pZ4nc1m41//9V+ZN28epaWl/OM//iOGYVjVDRGRrKCkWkRkGnvs\nscd46aWXaGpqYu/evXzzm9/ktdde4ytf+QpPPPEER44cobq6mnvuuWfU655++mm2bNnCBx98wDPP\nPMPPf/5zi3ogIpIdbKZpmlYHISIip6qpqeGRRx7hwQcfBGDjxo08/PDDXHXVVZSUlPC9730PgMHB\nQYqKimhsbKSmpgabzcaLL77IDTfcAMBPfvITfv/73/Pqq69a1hcRkUynkWoRkWls9uzZiZ+rq6tp\na2ujra2N6urqxON5eXmUlJRw+PDhM75OREQmj5JqEZFprLW1NfHzwYMHqayspLKykpaWlsTjgUCA\nrq4uqqqqzvg6ERGZPEqqRUSmsR//+MccOnSI7u5uvvWtb3H33Xdz77338uijj9LQ0EA4HOarX/0q\nq1evpqamJvG673//+/T09NDa2sqPfvQj7r77bus6ISKSBZxWByAiIuO77777uO6662hra+OWW27h\nn/7pn8jJyeEb3/gGd9xxBz09PaxZs4bHH3981OtuueUW6uvr6evr4/777+fzn/+8RT0QEckOulFR\nRGSaqqmp4d///d9Zv379eb3OZrPR2NjI/PnzJykyEREZS9M/RERERESSpKRaRERERCRJmv4hIiIi\nIpIkjVSLiIiIiCRJSbWIiIiISJKUVIuIiIiIJElJtYiIiIhIkpRUi4iIiIgkSUm1iIiIiEiS/n9w\nWG4nqGjXpgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x112d542e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<ggplot: (288183374)>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create scatter plot and two regression models (scaling exponential) using ggplot from ggplot import *\n",
    "ggplot(result, aes(x='pop',y='pred',color='type')) +\\\n",
    "geom_point(colors='blue') "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 8. More features about the model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- build model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from pyspark.ml.linalg import Vectors\n",
    "from pyspark.ml.regression import LinearRegression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df = spark.read.format('com.databricks.spark.csv').\\\n",
    "                               options(header='true', \\\n",
    "                               inferschema='true').load(\"./data/Advertising.csv\",header=True);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def transData(data):\n",
    "    return data.rdd.map(lambda r: [Vectors.dense(r[:-1]),r[-1]]).toDF(['features','label'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "transformed = transData(df)\n",
    "#transformed.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "lr = LinearRegression(maxIter=5, regParam=0.0, solver=\"normal\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "model = lr.fit(transformed)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- coefficients"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DenseVector([-0.0006, 0.0458, 0.1884, -0.0012])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.coefficients"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- intersection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.0052094200978514"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.intercept"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- summary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "def modelsummary(model):\n",
    "    import numpy as np\n",
    "    print (\"Note: the last rows are the information for Intercept\")\n",
    "    print (\"##\",\"-------------------------------------------------\")\n",
    "    print (\"##\",\"  Estimate  Std.Error  t Values  P-value\")\n",
    "    coef = np.append(list(model.coefficients),model.intercept)\n",
    "    Summary=model.summary\n",
    "    \n",
    "    for i in range(len(Summary.pValues)):\n",
    "        print (\"##\",'{:10.6f}'.format(coef[i]),\\\n",
    "        '{:10.6f}'.format(Summary.coefficientStandardErrors[i]),\\\n",
    "        '{:8.3f}'.format(Summary.tValues[i]),\\\n",
    "        '{:10.6f}'.format(Summary.pValues[i]))\n",
    "        \n",
    "    print (\"##\",'---')\n",
    "    print (\"##\",\"Mean squared error: % .6f\" % Summary.meanSquaredError, \", RMSE: % .6f\" % Summary.rootMeanSquaredError )\n",
    "    print (\"##\",\"Multiple R-squared: %f\" % Summary.r2, \", Total iterations: %i\"% Summary.totalIterations)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Note: the last rows are the information for Intercept\n",
      "## -------------------------------------------------\n",
      "##   Estimate  Std.Error  t Values  P-value\n",
      "##  -0.000580   0.002099   -0.276   0.782681\n",
      "##   0.045776   0.001399   32.725   0.000000\n",
      "##   0.188383   0.008648   21.784   0.000000\n",
      "##  -0.001243   0.005932   -0.210   0.834198\n",
      "##   3.005209   0.394208    7.623   0.000000\n",
      "## ---\n",
      "## Mean squared error:  2.783037 , RMSE:  1.668244\n",
      "## Multiple R-squared: 0.897251 , Total iterations: 1\n"
     ]
    }
   ],
   "source": [
    "modelsummary(model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "temp_path = 'temp/Users/wenqiangfeng/Dropbox/Spark/Code/model'\n",
    "modelPath = temp_path + \"/lr_model\"\n",
    "model.save(modelPath)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- save and extract model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "lr2 = model.load(modelPath)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "lr2.coefficients"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda root]",
   "language": "python",
   "name": "conda-root-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
